home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / sendmail / sendmail-5.65c+IDA-1.4.4.1 / aux / addr.c next >
Encoding:
C/C++ Source or Header  |  1990-06-05  |  3.4 KB  |  149 lines

  1. /*
  2.  * Copyright (c) 1983 Eric P. Allman
  3.  * Copyright (c) 1988 Regents of the University of California.
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms are permitted provided
  7.  * that: (1) source distributions retain this entire copyright notice and
  8.  * comment, and (2) distributions including binaries display the following
  9.  * acknowledgement:  ``This product includes software developed by the
  10.  * University of California, Berkeley and its contributors'' in the
  11.  * documentation or other materials provided with the distribution and in
  12.  * all advertising materials mentioning features or use of this software.
  13.  * Neither the name of the University nor the names of its contributors may
  14.  * be used to endorse or promote products derived from this software without
  15.  * specific prior written permission.
  16.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  17.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  19.  */
  20.  
  21. #ifndef lint
  22. char copyright[] =
  23. "@(#) Copyright (c) 1988 Regents of the University of California.\n\
  24.  All rights reserved.\n";
  25. #endif /* not lint */
  26.  
  27. #ifndef lint
  28. static char sccsid[] = "@(#)addr.c    5.3 (Berkeley) 6/1/90";
  29. #endif /* not lint */
  30.  
  31. # include "postbox.h"
  32.  
  33. /*
  34. **  PUTONQ -- put an address node on the end of a queue
  35. **
  36. **    Parameters:
  37. **        a -- the address to put on the queue.
  38. **        q -- the queue to put it on.
  39. **
  40. **    Returns:
  41. **        none
  42. **
  43. **    Side Effects:
  44. **        none
  45. **
  46. **    Called By:
  47. **        alias
  48. **        recipient
  49. */
  50.  
  51. putonq(a, q)
  52.     register ADDRESS *a;
  53.     register ADDRESS *q;
  54. {
  55.     if (q->q_prev == NULL)
  56.     {
  57.         q->q_prev = q->q_next = a;
  58.         a->q_prev = NULL;
  59.     }
  60.     else
  61.     {
  62.         a->q_prev = q->q_prev;
  63.         q->q_prev->q_next = a;
  64.         q->q_prev = a;
  65.     }
  66.     a->q_next = NULL;
  67. }
  68. /*
  69. **  TKOFFQ -- remove address node from queue
  70. **
  71. **    Takes a node off of a queue, from anyplace in the queue.
  72. **
  73. **    Parameters:
  74. **        a -- the node to remove.
  75. **        q -- the queue to remove it from.
  76. **
  77. **    Returns:
  78. **        none
  79. **
  80. **    Side Effects:
  81. **        none
  82. **
  83. **    Called By:
  84. **        alias
  85. */
  86.  
  87. tkoffq(a, q)
  88.     register ADDRESS *a;
  89.     register ADDRESS *q;
  90. {
  91.     if (a->q_prev != NULL)
  92.         a->q_prev->q_next = a->q_next;
  93.     else
  94.         q->q_next = a->q_next;
  95.     if (a->q_next != NULL)
  96.         a->q_next->q_prev = a->q_prev;
  97.     else
  98.         q->q_prev = a->q_prev;
  99. }
  100. /*
  101. **  SAMEADDR -- Determine if tow addresses are the same
  102. **
  103. **    This is not just a straight comparison -- if the mailer doesn't
  104. **    care about the host we just ignore it, etc.
  105. **
  106. **    Parameters:
  107. **        a, b -- pointers to the internal forms to compare.
  108. **        wildflg -- if TRUE, 'a' may have no user specified,
  109. **            in which case it is to match anything.
  110. **
  111. **    Returns:
  112. **        TRUE -- they represent the same mailbox.
  113. **        FALSE -- they don't.
  114. **
  115. **    Side Effects:
  116. **        none.
  117. **
  118. **    Called By:
  119. **        recipient
  120. **        alias
  121. */
  122.  
  123. bool
  124. sameaddr(a, b, wildflg)
  125.     register ADDRESS *a;
  126.     register ADDRESS *b;
  127.     bool wildflg;
  128. {
  129.     /* if they don't have the same mailer, forget it */
  130.     if (a->q_mailer != b->q_mailer)
  131.         return (FALSE);
  132.  
  133.     /* if the user isn't the same, we can drop out */
  134.     if ((!wildflg || a->q_user[0] != '\0') && strcmp(a->q_user, b->q_user) != 0)
  135.         return (FALSE);
  136.  
  137.     /* if the mailer ignores hosts, we have succeeded! */
  138.     if (bitset(M_NOHOST, Mailer[a->q_mailer]->m_flags))
  139.         return (TRUE);
  140.  
  141.     /* otherwise compare hosts (but be careful for NULL ptrs) */
  142.     if (a->q_host == NULL || b->q_host == NULL)
  143.         return (FALSE);
  144.     if (strcmp(a->q_host, b->q_host) != 0)
  145.         return (FALSE);
  146.  
  147.     return (TRUE);
  148. }
  149.